function w = diff (w)
%DIFF Differentiate waveform
%   waveform = diff(waveform)
%   goes from Displacement -> Velocity -> Acceleration
%
%   Input Arguments
%       WAVEFORM: a waveform object   N-DIMENSIONAL
%
%   Uses matlab's DIFF function to differentiate.  The way it handles the
%   units may be a little kludegy.
%
%   See also DIFF, WAVEFORM/INTEGRATE

% AUTHOR: Celso Reyes, Geophysical Institute, Univ. of Alaska Fairbanks
% $Date: 2012-04-11 16:15:09 +0000 (Wed, 11 Apr 2012) $
% $Revision: 348 $

Nmax = numel(w);

allFreq = get(w,'freq');

allUnits = get(w,'units'); %cell if numel(w)>1, char otherwise

if ~iscell(allUnits)
    allUnits = {allUnits};
end

for I = 1 : Nmax
    w(I) = set(w(I),'data',diff(w(I).data) .* allFreq(I));
    tempUnits = allUnits{I};
    whereInUnits = strfind(tempUnits,' * sec');
    if isempty(whereInUnits)
        w(I) = set(w(I),'units', [tempUnits, ' / sec']);
    else
        tempUnits(whereInUnits(1) :whereInUnits(1)+5) = [];
        w(I) = set(w(I),'units',tempUnits);
    end
end

w = addhistory(w,'Differentiated');